/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;

import Pojo.Professor;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author Thiago Schons
 */
public class ProfessorDaoImplJPA implements ProfessorDao{
    
         /**
	 * Adicionar uma Professor ao banco de dados de Professores
	 * @param professor
	 * @return true ou false indicando sucesso ou não
	 */
	public boolean inserir(Professor professor){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                em.persist(professor);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
        }
        
         /**
	 * Remover Professor do banco de dados de Professores
	 * @param professor
	 * @return true ou false indicando sucesso ou não
	 */
	public boolean remover(Professor professor){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                Professor professorAux = em.find(Professor.class, professor.getId());
                em.remove(professorAux);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
        }
        
         /**
	 * alterar Professor do banco de dados de Professors
	 * @param professor
	 * @return true ou false indicando sucesso ou não
	 */
         public boolean alterar(Professor professor){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                em.merge(professor);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
         }
         
         /**
         * Busca todos os professores do banco de dados
         * @return Lista de Professores
         */
         public List<Professor> pesquisarTodos(){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            List<Professor> listaProfessores;
            listaProfessores = null;
            try{
                tx.begin();
                Query query = em.createQuery("select a from Professor a");
                listaProfessores = query.getResultList();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(listaProfessores);
         }

         /**
	 * Pesquisa de Professores passando o cpf
	 * @param cpf
	 * @return Professor cujo cpf é o que foi passado, ou um null indicando que nenhum professor foi encontrado
	 */       
	public Professor pesquisarPorCpf(String cpf){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            Professor professor = null;
            try{
                tx.begin();
                Query query = em.createQuery("select a from Professor a where a.cpf= :cpf");
                query.setParameter("cpf", cpf);
                professor = (Professor) query.getSingleResult();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(professor);
        }
        
         /**
	 * Pesquisa de Professores passando o nome
	 * @param nome
	 * @return Professor cujo nome é o que foi passado, ou um null indicando que nenhum professor foi encontrado
	 */       
        public List<Professor> pesquisarPorNome(String nome){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            List<Professor> listaProfessor = null;
            try{
                tx.begin();
                Query query;
                query = em.createQuery("select a from Professor a where a.nome = :nome");
                query.setParameter("nome", nome);
                listaProfessor = query.getResultList();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(listaProfessor);
        }
        
         /**
         * Busca todos os professores do banco de dados pelo departamento
         * @return Lista de Professores
         */
         public List<Professor> pesquisarPorDepartamento(String departamento){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            List<Professor> listaProfessor = null;
            try{
                tx.begin();
                Query query = em.createQuery("select a from Professor a where a.departamento= :departamento");
                query.setParameter("departamento", departamento);
                listaProfessor = query.getResultList();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(listaProfessor);
        }
        
        /**
	 * Pesquisa professores pelo id
	 * @param id
	 * @return Professor encontrada na busca
	 */ 
	public Professor pesquisarPorId(int id){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            Professor professor=null;
            try{
                tx.begin();
                Query query = em.createQuery("select d from Professor d where d.id= :id");
                query.setParameter("id", id);
                professor = (Professor) query.getSingleResult();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(professor);
        }
         
}
